共计 1851 个字符,预计需要花费 5 分钟才能阅读完成。
引入
CGI、FastCGI、WSGI、uWSGI、uwsgi 是什么 ?
之间的关系?
一.CGI
- 通用网关接口(Common Gateway Interface/CGI)是外部应用程序与 Web 服务器之间的接口标准,用来规定一个程序该如何与 web 服务器程序之间通信
- CGI 程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行
- 用来规范 web 服务器传输到 php 解释器中的数据类型以及数据格式,包括 URL、查询字符串、POST 数据、HTTP header 等,也就是为了保证 web server 传递过来的数据是标准格式的
- 总结 : CGI 是一个标准,定义了客户端服务器之间如何传数据
二.fastCGI
- 快速通用网关接口 (Fast Common Gateway Interface/FastCGI) 是一种让交互程序与 Web 服务器通信的协议, 它是早期 CGI 的一个增强版本
-
像是一个常驻 (long-live) 型的 CGI , 废除了 CGI fork-and-execute (来一个请求 fork 一个新进程处理, 处理完再把进程 kill 掉)的工作方式, 转而使用一种长生存期的方法, 减少了进程消耗, 从而使服务器可以同时处理更多的网页请求
-
使用 fastCGI 的服务器 :
- Apache HTTP Server (部分)
- Cherokee HTTP Server
- Hiawatha Webserver
- Lighttpd
- Nginx
- LiteSpeed Web Server
- Microsoft IIS
- 总结 : CGI 的升级版
三.WSGI
- 全称 Web Server Gateway Interface 或者 Python Web Server Gateway Interface
-
Web 服务器网关接口, 是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口; 自从 WSGI 被开发出来以后, 许多其它语言中也出现了类似接口
-
WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口, 以提升可移植 Web 应用开发的共同点; WSGI 是基于现存的 CGI 标准而设计的
# 例 :
Web server(web 服务器: 比如 uWSGI) 与 Web application(web 应用框架: 比如 django)进行交互
uwsgi 协议需要将过来的请求转给 django 处理, 那么 uWSGI 和 django 的交互和调用就需要一个统一的规范
这个规范就是 WSGI(Web Server Gateway Interface)
- WSGI 的官方定义是: the Python Web Server Gateway Interface; 从名字就可以看出来,这东西是一个 Gateway,也就是网关: 网关的作用就是在协议之间进行转换
- 实现 WSGI 协议的模块 :
1.django : wsgiref 模块, 本质上就是编写一 socket 服务端, 用于接收用户请求
2.Flask : werkzeug、wsgi 模块, 本质上就是编写一个 socket 服务端,用于接收用户请求
- 总结 : 为 Python 定义的 web 服务器和 web 框架之间的接口标准
四.wsgiref
- Python 中的一个 WSGI 模块 : wsgiref
- 它是用纯 Python 编写的 WSGI 服务器的 ''参考实现''
- 所谓 ''参考实现'' 是指该实现完全符合 WSGI 标准,但是不考虑任何运行效率,仅供开发和测试使用
五.uWSGI
- uWSGI 是一个 Web 服务器, 它实现了 WSGI、uwsgi、http 等协议, 用于接收前端服务器转发的动态请求并处理后发给 web 应用程序
- 类似的 web 服务器
uWSGI : 用 c 语言写的,性能比较高
gunicorn : python 写的, 在 unix 上被广泛使用
tornado : python 写的, 异步非阻塞 web 服务器, 也可以部署 django 项目
wsgiref、werkzeug(是符合 WSGI 协议的 web 服务器 + 工具包(封装了一些东西))
- Nginx 中 HttpUwsgiModule 的作用是与 uWSGI 服务器进行交换
- 总结 : 一个 Web Server, 即一个实现了 WSGI 的服务器, 处理发来的请求
六.uwsgi
-
它是 uWSGI 服务器实现的独有的线路协议, 用于定义传输信息的类型, 是用于前端服务器与 uwsgi 的通信规范
-
uwsgi 和 WSGI 都是基于 CGI 扩展出来的
- 总结 : uWSGI 自有的一个协议
七. 区分 WSGI、uwsgi、uWSGI
- WSGI 是一种通信协议
- uwsgi 是 uWSGI 自有的一种线路协议,常用于在 uWSGI 服务器与其他网络服务器的数据通信
- 而 uWSGI 是实现了 uwsgi 和 WSGI 两种协议的 Web 服务器
正文完